Termination w.r.t. Q of the following Term Rewriting System could be proven:
Q restricted rewrite system:
The TRS R consists of the following rules:
rev1(0, nil) → 0
rev1(s(X), nil) → s(X)
rev1(X, cons(Y, L)) → rev1(Y, L)
rev(nil) → nil
rev(cons(X, L)) → cons(rev1(X, L), rev2(X, L))
rev2(X, nil) → nil
rev2(X, cons(Y, L)) → rev(cons(X, rev(rev2(Y, L))))
Q is empty.
↳ QTRS
↳ Overlay + Local Confluence
Q restricted rewrite system:
The TRS R consists of the following rules:
rev1(0, nil) → 0
rev1(s(X), nil) → s(X)
rev1(X, cons(Y, L)) → rev1(Y, L)
rev(nil) → nil
rev(cons(X, L)) → cons(rev1(X, L), rev2(X, L))
rev2(X, nil) → nil
rev2(X, cons(Y, L)) → rev(cons(X, rev(rev2(Y, L))))
Q is empty.
The TRS is overlay and locally confluent. By [19] we can switch to innermost.
↳ QTRS
↳ Overlay + Local Confluence
↳ QTRS
↳ DependencyPairsProof
Q restricted rewrite system:
The TRS R consists of the following rules:
rev1(0, nil) → 0
rev1(s(X), nil) → s(X)
rev1(X, cons(Y, L)) → rev1(Y, L)
rev(nil) → nil
rev(cons(X, L)) → cons(rev1(X, L), rev2(X, L))
rev2(X, nil) → nil
rev2(X, cons(Y, L)) → rev(cons(X, rev(rev2(Y, L))))
The set Q consists of the following terms:
rev1(0, nil)
rev1(s(x0), nil)
rev1(x0, cons(x1, x2))
rev(nil)
rev(cons(x0, x1))
rev2(x0, nil)
rev2(x0, cons(x1, x2))
Using Dependency Pairs [1,15] we result in the following initial DP problem:
Q DP problem:
The TRS P consists of the following rules:
REV1(X, cons(Y, L)) → REV1(Y, L)
REV2(X, cons(Y, L)) → REV(rev2(Y, L))
REV(cons(X, L)) → REV2(X, L)
REV2(X, cons(Y, L)) → REV2(Y, L)
REV2(X, cons(Y, L)) → REV(cons(X, rev(rev2(Y, L))))
REV(cons(X, L)) → REV1(X, L)
The TRS R consists of the following rules:
rev1(0, nil) → 0
rev1(s(X), nil) → s(X)
rev1(X, cons(Y, L)) → rev1(Y, L)
rev(nil) → nil
rev(cons(X, L)) → cons(rev1(X, L), rev2(X, L))
rev2(X, nil) → nil
rev2(X, cons(Y, L)) → rev(cons(X, rev(rev2(Y, L))))
The set Q consists of the following terms:
rev1(0, nil)
rev1(s(x0), nil)
rev1(x0, cons(x1, x2))
rev(nil)
rev(cons(x0, x1))
rev2(x0, nil)
rev2(x0, cons(x1, x2))
We have to consider all minimal (P,Q,R)-chains.
↳ QTRS
↳ Overlay + Local Confluence
↳ QTRS
↳ DependencyPairsProof
↳ QDP
↳ DependencyGraphProof
Q DP problem:
The TRS P consists of the following rules:
REV1(X, cons(Y, L)) → REV1(Y, L)
REV2(X, cons(Y, L)) → REV(rev2(Y, L))
REV(cons(X, L)) → REV2(X, L)
REV2(X, cons(Y, L)) → REV2(Y, L)
REV2(X, cons(Y, L)) → REV(cons(X, rev(rev2(Y, L))))
REV(cons(X, L)) → REV1(X, L)
The TRS R consists of the following rules:
rev1(0, nil) → 0
rev1(s(X), nil) → s(X)
rev1(X, cons(Y, L)) → rev1(Y, L)
rev(nil) → nil
rev(cons(X, L)) → cons(rev1(X, L), rev2(X, L))
rev2(X, nil) → nil
rev2(X, cons(Y, L)) → rev(cons(X, rev(rev2(Y, L))))
The set Q consists of the following terms:
rev1(0, nil)
rev1(s(x0), nil)
rev1(x0, cons(x1, x2))
rev(nil)
rev(cons(x0, x1))
rev2(x0, nil)
rev2(x0, cons(x1, x2))
We have to consider all minimal (P,Q,R)-chains.
The approximation of the Dependency Graph [15,17,22] contains 2 SCCs with 1 less node.
↳ QTRS
↳ Overlay + Local Confluence
↳ QTRS
↳ DependencyPairsProof
↳ QDP
↳ DependencyGraphProof
↳ AND
↳ QDP
↳ UsableRulesProof
↳ QDP
Q DP problem:
The TRS P consists of the following rules:
REV1(X, cons(Y, L)) → REV1(Y, L)
The TRS R consists of the following rules:
rev1(0, nil) → 0
rev1(s(X), nil) → s(X)
rev1(X, cons(Y, L)) → rev1(Y, L)
rev(nil) → nil
rev(cons(X, L)) → cons(rev1(X, L), rev2(X, L))
rev2(X, nil) → nil
rev2(X, cons(Y, L)) → rev(cons(X, rev(rev2(Y, L))))
The set Q consists of the following terms:
rev1(0, nil)
rev1(s(x0), nil)
rev1(x0, cons(x1, x2))
rev(nil)
rev(cons(x0, x1))
rev2(x0, nil)
rev2(x0, cons(x1, x2))
We have to consider all minimal (P,Q,R)-chains.
As all Q-normal forms are R-normal forms we are in the innermost case. Hence, by the usable rules processor [15] we can delete all non-usable rules [17] from R.
↳ QTRS
↳ Overlay + Local Confluence
↳ QTRS
↳ DependencyPairsProof
↳ QDP
↳ DependencyGraphProof
↳ AND
↳ QDP
↳ UsableRulesProof
↳ QDP
↳ QReductionProof
↳ QDP
Q DP problem:
The TRS P consists of the following rules:
REV1(X, cons(Y, L)) → REV1(Y, L)
R is empty.
The set Q consists of the following terms:
rev1(0, nil)
rev1(s(x0), nil)
rev1(x0, cons(x1, x2))
rev(nil)
rev(cons(x0, x1))
rev2(x0, nil)
rev2(x0, cons(x1, x2))
We have to consider all minimal (P,Q,R)-chains.
We deleted the following terms from Q as each root-symbol of these terms does neither occur in P nor in R.
rev1(0, nil)
rev1(s(x0), nil)
rev1(x0, cons(x1, x2))
rev(nil)
rev(cons(x0, x1))
rev2(x0, nil)
rev2(x0, cons(x1, x2))
↳ QTRS
↳ Overlay + Local Confluence
↳ QTRS
↳ DependencyPairsProof
↳ QDP
↳ DependencyGraphProof
↳ AND
↳ QDP
↳ UsableRulesProof
↳ QDP
↳ QReductionProof
↳ QDP
↳ QDPSizeChangeProof
↳ QDP
Q DP problem:
The TRS P consists of the following rules:
REV1(X, cons(Y, L)) → REV1(Y, L)
R is empty.
Q is empty.
We have to consider all minimal (P,Q,R)-chains.
By using the subterm criterion [20] together with the size-change analysis [32] we have proven that there are no infinite chains for this DP problem. From the DPs we obtained the following set of size-change graphs:
- REV1(X, cons(Y, L)) → REV1(Y, L)
The graph contains the following edges 2 > 1, 2 > 2
↳ QTRS
↳ Overlay + Local Confluence
↳ QTRS
↳ DependencyPairsProof
↳ QDP
↳ DependencyGraphProof
↳ AND
↳ QDP
↳ QDP
↳ QDPOrderProof
↳ QDPOrderProof
Q DP problem:
The TRS P consists of the following rules:
REV2(X, cons(Y, L)) → REV(rev2(Y, L))
REV(cons(X, L)) → REV2(X, L)
REV2(X, cons(Y, L)) → REV2(Y, L)
REV2(X, cons(Y, L)) → REV(cons(X, rev(rev2(Y, L))))
The TRS R consists of the following rules:
rev1(0, nil) → 0
rev1(s(X), nil) → s(X)
rev1(X, cons(Y, L)) → rev1(Y, L)
rev(nil) → nil
rev(cons(X, L)) → cons(rev1(X, L), rev2(X, L))
rev2(X, nil) → nil
rev2(X, cons(Y, L)) → rev(cons(X, rev(rev2(Y, L))))
The set Q consists of the following terms:
rev1(0, nil)
rev1(s(x0), nil)
rev1(x0, cons(x1, x2))
rev(nil)
rev(cons(x0, x1))
rev2(x0, nil)
rev2(x0, cons(x1, x2))
We have to consider all minimal (P,Q,R)-chains.
We use the reduction pair processor [15].
The following pairs can be oriented strictly and are deleted.
REV2(X, cons(Y, L)) → REV(rev2(Y, L))
REV2(X, cons(Y, L)) → REV2(Y, L)
REV2(X, cons(Y, L)) → REV(cons(X, rev(rev2(Y, L))))
The remaining pairs can at least be oriented weakly.
REV(cons(X, L)) → REV2(X, L)
Used ordering: Polynomial interpretation [25]:
POL(0) = 0
POL(REV(x1)) = x1
POL(REV2(x1, x2)) = 1 + x2
POL(cons(x1, x2)) = 1 + x2
POL(nil) = 0
POL(rev(x1)) = x1
POL(rev1(x1, x2)) = 0
POL(rev2(x1, x2)) = x2
POL(s(x1)) = 0
The following usable rules [17] were oriented:
rev(nil) → nil
rev2(X, nil) → nil
rev(cons(X, L)) → cons(rev1(X, L), rev2(X, L))
rev2(X, cons(Y, L)) → rev(cons(X, rev(rev2(Y, L))))
↳ QTRS
↳ Overlay + Local Confluence
↳ QTRS
↳ DependencyPairsProof
↳ QDP
↳ DependencyGraphProof
↳ AND
↳ QDP
↳ QDP
↳ QDPOrderProof
↳ QDP
↳ DependencyGraphProof
↳ QDPOrderProof
Q DP problem:
The TRS P consists of the following rules:
REV(cons(X, L)) → REV2(X, L)
The TRS R consists of the following rules:
rev1(0, nil) → 0
rev1(s(X), nil) → s(X)
rev1(X, cons(Y, L)) → rev1(Y, L)
rev(nil) → nil
rev(cons(X, L)) → cons(rev1(X, L), rev2(X, L))
rev2(X, nil) → nil
rev2(X, cons(Y, L)) → rev(cons(X, rev(rev2(Y, L))))
The set Q consists of the following terms:
rev1(0, nil)
rev1(s(x0), nil)
rev1(x0, cons(x1, x2))
rev(nil)
rev(cons(x0, x1))
rev2(x0, nil)
rev2(x0, cons(x1, x2))
We have to consider all minimal (P,Q,R)-chains.
The approximation of the Dependency Graph [15,17,22] contains 0 SCCs with 1 less node.
We use the reduction pair processor [15].
The following pairs can be oriented strictly and are deleted.
REV2(X, cons(Y, L)) → REV(rev2(Y, L))
REV2(X, cons(Y, L)) → REV2(Y, L)
REV2(X, cons(Y, L)) → REV(cons(X, rev(rev2(Y, L))))
The remaining pairs can at least be oriented weakly.
REV(cons(X, L)) → REV2(X, L)
Used ordering: Matrix interpretation [3]:
Non-tuple symbols:
M( cons(x1, x2) ) = | | + | | · | x1 | + | | · | x2 |
M( rev2(x1, x2) ) = | | + | | · | x1 | + | | · | x2 |
M( rev1(x1, x2) ) = | | + | | · | x1 | + | | · | x2 |
Tuple symbols:
M( REV2(x1, x2) ) = | 1 | + | | · | x1 | + | | · | x2 |
Matrix type:
We used a basic matrix type which is not further parametrizeable.
As matrix orders are CE-compatible, we used usable rules w.r.t. argument filtering in the order.
The following usable rules [17] were oriented:
rev(nil) → nil
rev2(X, nil) → nil
rev(cons(X, L)) → cons(rev1(X, L), rev2(X, L))
rev2(X, cons(Y, L)) → rev(cons(X, rev(rev2(Y, L))))
↳ QTRS
↳ Overlay + Local Confluence
↳ QTRS
↳ DependencyPairsProof
↳ QDP
↳ DependencyGraphProof
↳ AND
↳ QDP
↳ QDP
↳ QDPOrderProof
↳ QDPOrderProof
↳ QDP
Q DP problem:
The TRS P consists of the following rules:
REV(cons(X, L)) → REV2(X, L)
The TRS R consists of the following rules:
rev1(0, nil) → 0
rev1(s(X), nil) → s(X)
rev1(X, cons(Y, L)) → rev1(Y, L)
rev(nil) → nil
rev(cons(X, L)) → cons(rev1(X, L), rev2(X, L))
rev2(X, nil) → nil
rev2(X, cons(Y, L)) → rev(cons(X, rev(rev2(Y, L))))
The set Q consists of the following terms:
rev1(0, nil)
rev1(s(x0), nil)
rev1(x0, cons(x1, x2))
rev(nil)
rev(cons(x0, x1))
rev2(x0, nil)
rev2(x0, cons(x1, x2))
We have to consider all minimal (P,Q,R)-chains.